home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / mix / aes.h next >
C/C++ Source or Header  |  2005-10-18  |  6KB  |  150 lines

  1. #ifndef AES_H
  2. #define AES_H
  3.  
  4. #define LIBMIX_MD5_HASH
  5. #include <mix/lmconfig.h>
  6.  
  7. #ifndef _GNU_SOURCE
  8. #define _GNU_SOURCE
  9. #endif
  10. #include <stdio.h>
  11. #include <string.h>
  12. #ifdef HAVE_UNISTD_H
  13. #include <unistd.h>
  14. #endif
  15.  
  16. #ifndef u1byte
  17. typedef unsigned char u1byte;    /* an 8 bit unsigned character type */
  18. typedef unsigned short u2byte;    /* a 16 bit unsigned integer type   */
  19. typedef unsigned long u4byte;    /* a 32 bit unsigned integer type   */
  20. typedef signed char s1byte;    /* an 8 bit signed character type   */
  21. typedef signed short s2byte;    /* a 16 bit signed integer type     */
  22. typedef signed long s4byte;    /* a 32 bit signed integer type     */
  23. #endif
  24.  
  25. /* algorithms */
  26. u4byte *cast_setkey (const u4byte in_key[], const u4byte key_len);
  27. void cast_encrypt (const u4byte in_blk[4], u4byte out_blk[4]);
  28. void cast_decrypt (const u4byte in_blk[4], u4byte out_blk[4]);
  29. u4byte *mars_setkey (const u4byte in_key[], const u4byte key_len);
  30. void mars_encrypt (const u4byte in_blk[4], u4byte out_blk[4]);
  31. void mars_decrypt (const u4byte in_blk[4], u4byte out_blk[4]);
  32. u4byte *safer_setkey (const u4byte in_key[], const u4byte key_len);
  33. void safer_encrypt (const u4byte in_blk[4], u4byte out_blk[4]);
  34. void safer_decrypt (const u4byte in_blk[4], u4byte out_blk[4]);
  35. u4byte *twofish_setkey (const u4byte in_key[], const u4byte key_len);
  36. void twofish_encrypt (const u4byte in_blk[4], u4byte out_blk[4]);
  37. void twofish_decrypt (const u4byte in_blk[4], u4byte out_blk[4]);
  38. u4byte *rijndael_setkey (const u4byte in_key[], const u4byte key_len);
  39. void rijndael_encrypt (const u4byte in_blk[4], u4byte out_blk[4]);
  40. void rijndael_decrypt (const u4byte in_blk[4], u4byte out_blk[4]);
  41.  
  42. typedef struct
  43.   {
  44.     unsigned long int state[4];
  45.     unsigned long int count[2];
  46.     unsigned char buffer[64];
  47.   }
  48. MD5_CTX;
  49.  
  50. void MD5Init(MD5_CTX *);
  51. void MD5Update(MD5_CTX *, const unsigned char *, unsigned int);
  52. void MD5Final(unsigned char[16], MD5_CTX *);
  53. void MD5Transform(unsigned long int[4], const unsigned char[64]);
  54. void md5Encode(unsigned char *, unsigned long int *, unsigned int);
  55. void md5Decode(unsigned long int *, const unsigned char *, unsigned int);
  56.  
  57. /* esoteric macros =oP */
  58.  
  59. #ifndef _MSC_VER
  60. #define rotr(x,n)   (((x) >> ((int)(n))) | ((x) << (32 - (int)(n))))
  61. #define rotl(x,n)   (((x) << ((int)(n))) | ((x) >> (32 - (int)(n))))
  62. #else
  63. #ifdef HAVE_STDLIB_H
  64. #include <stdlib.h>
  65. #endif
  66. #pragma intrinsic(_lrotr,_lrotl)
  67. #define rotr(x,n)   _lrotr(x,n)
  68. #define rotl(x,n)   _lrotl(x,n)
  69. #endif
  70. #define bswap(x)    (rotl(x, 8) & 0x00ff00ff | rotr(x, 8) & 0xff00ff00)
  71. #define byte(x,n)   ((u1byte)((x) >> (8 * n)))
  72. #ifdef  BYTE_SWAP
  73. #define io_swap(x)  bswap(x)
  74. #else
  75. #define io_swap(x)  (x)
  76. #endif
  77. #ifdef  WORD_SWAP
  78. #define get_block(x)                            \
  79.     ((u4byte*)(x))[0] = io_swap(in_blk[3]);     \
  80.     ((u4byte*)(x))[1] = io_swap(in_blk[2]);     \
  81.     ((u4byte*)(x))[2] = io_swap(in_blk[1]);     \
  82.     ((u4byte*)(x))[3] = io_swap(in_blk[0])
  83. #define put_block(x)                            \
  84.     out_blk[3] = io_swap(((u4byte*)(x))[0]);    \
  85.     out_blk[2] = io_swap(((u4byte*)(x))[1]);    \
  86.     out_blk[1] = io_swap(((u4byte*)(x))[2]);    \
  87.     out_blk[0] = io_swap(((u4byte*)(x))[3])
  88. #define get_key(x,len)                          \
  89.     ((u4byte*)(x))[4] = ((u4byte*)(x))[5] =     \
  90.     ((u4byte*)(x))[6] = ((u4byte*)(x))[7] = 0;  \
  91.     switch((((len) + 63) / 64)) {               \
  92.     case 2:                                     \
  93.     ((u4byte*)(x))[0] = io_swap(in_key[3]);     \
  94.     ((u4byte*)(x))[1] = io_swap(in_key[2]);     \
  95.     ((u4byte*)(x))[2] = io_swap(in_key[1]);     \
  96.     ((u4byte*)(x))[3] = io_swap(in_key[0]);     \
  97.     break;                                      \
  98.     case 3:                                     \
  99.     ((u4byte*)(x))[0] = io_swap(in_key[5]);     \
  100.     ((u4byte*)(x))[1] = io_swap(in_key[4]);     \
  101.     ((u4byte*)(x))[2] = io_swap(in_key[3]);     \
  102.     ((u4byte*)(x))[3] = io_swap(in_key[2]);     \
  103.     ((u4byte*)(x))[4] = io_swap(in_key[1]);     \
  104.     ((u4byte*)(x))[5] = io_swap(in_key[0]);     \
  105.     break;                                      \
  106.     case 4:                                     \
  107.     ((u4byte*)(x))[0] = io_swap(in_key[7]);     \
  108.     ((u4byte*)(x))[1] = io_swap(in_key[6]);     \
  109.     ((u4byte*)(x))[2] = io_swap(in_key[5]);     \
  110.     ((u4byte*)(x))[3] = io_swap(in_key[4]);     \
  111.     ((u4byte*)(x))[4] = io_swap(in_key[3]);     \
  112.     ((u4byte*)(x))[5] = io_swap(in_key[2]);     \
  113.     ((u4byte*)(x))[6] = io_swap(in_key[1]);     \
  114.     ((u4byte*)(x))[7] = io_swap(in_key[0]);     \
  115.     }
  116. #else
  117. #define get_block(x)                            \
  118.     ((u4byte*)(x))[0] = io_swap(in_blk[0]);     \
  119.     ((u4byte*)(x))[1] = io_swap(in_blk[1]);     \
  120.     ((u4byte*)(x))[2] = io_swap(in_blk[2]);     \
  121.     ((u4byte*)(x))[3] = io_swap(in_blk[3])
  122. #define put_block(x)                            \
  123.     out_blk[0] = io_swap(((u4byte*)(x))[0]);    \
  124.     out_blk[1] = io_swap(((u4byte*)(x))[1]);    \
  125.     out_blk[2] = io_swap(((u4byte*)(x))[2]);    \
  126.     out_blk[3] = io_swap(((u4byte*)(x))[3])
  127. #define get_key(x,len)                          \
  128.     ((u4byte*)(x))[4] = ((u4byte*)(x))[5] =     \
  129.     ((u4byte*)(x))[6] = ((u4byte*)(x))[7] = 0;  \
  130.     switch((((len) + 63) / 64)) {               \
  131.     case 4:                                     \
  132.     ((u4byte*)(x))[6] = io_swap(in_key[6]);     \
  133.     ((u4byte*)(x))[7] = io_swap(in_key[7]);     \
  134.     case 3:                                     \
  135.     ((u4byte*)(x))[4] = io_swap(in_key[4]);     \
  136.     ((u4byte*)(x))[5] = io_swap(in_key[5]);     \
  137.     case 2:                                     \
  138.     ((u4byte*)(x))[0] = io_swap(in_key[0]);     \
  139.     ((u4byte*)(x))[1] = io_swap(in_key[1]);     \
  140.     ((u4byte*)(x))[2] = io_swap(in_key[2]);     \
  141.     ((u4byte*)(x))[3] = io_swap(in_key[3]);     \
  142.     }
  143. #endif
  144. #ifdef  BLOCK_SWAP
  145. #define BYTE_SWAP
  146. #define WORD_SWAP
  147. #endif
  148.  
  149. #endif
  150.